<?php
/**
 * Permite crear nuevos usuarios del sistema
 * @package simertweb 
 * @subpackage controllers  
 * @category Administración
 * @author Grecia Espinoza <mrcl2587@gmail.com>
 * @author Juan Maldonado  <jgmaldonadoj@gmail.com> 
 * @version 1.0 
 */
class Nuevo_usuario extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->load->model('mpersona');
        $this->load->model('mempleado');
        $this->load->model('mrol');
        $this->load->model('acceso');
    }

    /**
     * Muestra la interfaz para crear nuevos usuarios del sistema
     */
    function index() {
        if ($this->acceso->sesion() == 1) {
            $data2['contrasenia']=  $this->mempleado->generar_contrasenia();
            $data['listaroles'] = $this->mrol->listarRoles();
            $this->load->view('includes/menu_izquierdo');
            $this->load->view('includes/cabecera',$data2);
            $this->load->view('nuevo_usuario', $data);
            $this->load->view('includes/footer');
        } else {
            $this->load->view('autenticacion');
        }
    }


    /**
     * Permite guardar un nuevo usuario del sistema
     */
    function guardarUsuario() {
        $this->form_validation->set_rules('tipo', 'Nombres', 'required');
        $this->form_validation->set_rules('nombres', 'Nombres', 'required|callback_alpha_space|min_length[3]|max_length[30]|trim');
        $this->form_validation->set_rules('apellidos', 'Apellidos', 'required|callback_alpha_space|min_length[3]|max_length[30]|trim');
        $this->form_validation->set_rules('cedula', 'Cédula', 'callback_cedula_check|callback_validar_cedula|required|integer|exact_length[10]|trim');
        $this->form_validation->set_rules('direccion', 'Dirección', 'required|trim');
        $this->form_validation->set_rules('telefono', 'Teléfono', 'integer|min_length[7]|max_length[10]|trim');
        $this->form_validation->set_rules('correo', 'Correo', 'valid_email|trim');
        $this->form_validation->set_rules('nombreusuario', 'Usuario', 'callback_nombreusuario_check|required|min_length[5]|max_length[30]|trim');
        $this->form_validation->set_rules('clave', 'Contraseña', 'required|trim');
        $this->form_validation->set_rules('claveconf', 'Confirmar Contraseña', 'required|matches[clave]');

        if ($this->form_validation->run() === TRUE) {
            $this->mempleado->guardarUsuario();
            $data['message'] = '/simertweb/nuevo_usuario';
            $this->load->view('includes/menu_izquierdo');
            $this->load->view('includes/cabecera');
            $this->load->view('includes/mensaje_exito', $data);
            $this->load->view('includes/footer');
        } else {
            $this->index();
        }
    }
    
    
    /**
     * Valida que el nombre de usuario se único
     * @return boolean
     */
    function nombreusuario_check() {
        if ($this->mempleado->validar_usuario() == TRUE) {
            return TRUE;
        } else {
            $this->form_validation->set_message('nombreusuario_check', '<p style="color: red">El usuario ingresado ya existe</p>');
            return FALSE;
        }
    }

    /**
     * Valida que el número de cédula de identidad sea único
     * @return boolean
     */
    function cedula_check() {
        if ($this->mpersona->validar_persona() == TRUE) {
            return TRUE;
        } else {
            $this->form_validation->set_message('cedula_check', '<p style="color: red">La C.I. ingresada ya existe</p>');
            return FALSE;
        }
    }

    /**
     * Valida que el número de cédula de identidad sea correcto
     * @return boolean
     */
    function validar_cedula() {
        $mensaje = $this->mpersona->validarCI($_POST['cedula']);
        if (is_bool($mensaje)) {
            return TRUE;
        } else {
            $this->form_validation->set_message('validar_cedula', '<p style="color: red">Cédula de Identidad incorrecta</p>');
            return FALSE;
        }
    }

    /**
     * Válida que la cadena contenga caracteres alfabéticos, espacios y tildes
     * @param type $str_in es el parámetro que se ingresa en el formulario
     * @return boolean
     */
    function alpha_space($str_in = '') {
        if (!preg_match("/^([-a-záéíóúÁÉÍÓÚñÑ ])+$/i", $str_in)) {
            $this->form_validation->set_message('alpha_space', '<p style="color: red">El campo %s acepta solo carateres alfabéticos.</p>');
            return FALSE;
        } else {
            return TRUE;
        }
    }

}

?>
